package cn.wit.sst.utils;

import java.util.List;

import cn.wit.sst.dto.ScoreRankDto;

public class Utils {
	/**
	 * 由于cpu不能精确表示浮点型数据、因此不能用 f1 == f2来比较浮点型数据
	 * 需要以一定的精度来进行等值比较
	 * @return
	 */
	public static boolean equals(float f1, float f2) {
		float epsilon = 0.001f;
		return Math.abs(f1 - f2) < epsilon;
	}

	public static void computeRank(List<ScoreRankDto> scores) {
		// 设置第一个元素的排名和排序
		scores.stream().findFirst().ifPresent(score -> {
			score.setRank(1);
			score.setIndex(1);
		});

		// 依次设置后续元素的排名和排序
		scores.stream().reduce((left, right) -> {
			right.setIndex(left.getIndex() + 1);

			if (Utils.equals(left.getScore(), right.getScore())) {
				right.setRank(left.getRank());
			} else {
				right.setRank(right.getIndex());
			}

			return right;
		});
	}
}
